#include <iostream>
#include <vector>
#include <deque>
#include <algorithm>
#include <ctime>

using namespace std;

//评委打分
//有5名选手：选手ABCDE，10个评委分别对每一名选手打分，去除最高分，去除评委中最低分，取平均分。
//实现步骤：
//1. 创建五名选手，放到vector中
//2. 遍历vector容器，取出来每一个选手，执行for循环，可以把10个评分打分存到deque容器中
//3. sort算法对deque容器中分数排序，去除最高和最低分
//4. deque容器遍历一遍，累加总分
//5. 获取平均分

//选手类
class Person {
public:
    string name;//姓名
    int score;//平均分
    Person(string name, int score) {
        this->name = name;
        this->score = score;
    }
};

void createPerson(vector<Person> &v) {
    string nameSeed = "ABCDE";
    for (int i = 0; i < 5; ++i) {
        string name = "选手";
        name += nameSeed[i];
        int score = 0;
        Person p(name, score);
        v.push_back(p);//将创建的person对象 放入到容器中
    }
}

//随机打分
void setScore(vector<Person> &v) {
    for (vector<Person>::iterator it = v.begin(); it != v.end(); ++it) {
        deque<int> d;//将评委的分数 放入到deque容器中
        for (int i = 0; i < 10; ++i) {
            int score = rand() % 41 + 60;// 60 ~ 100
            d.push_back(score);
        }

        cout << "选手:" << it->name << ",得分:" << endl;
        for (deque<int>::iterator dit = d.begin(); dit != d.end(); ++dit) {
            cout << *dit << " ";
        }
        cout << endl;

        sort(d.begin(), d.end());//排序
        d.pop_back();//去除最高和最低分
        d.pop_front();

        int sum = 0;
        for (deque<int>::iterator dit = d.begin(); dit != d.end(); ++dit) {
            sum += *dit;//累加每个评委的分数
        }
        int avg = sum / d.size();//取平均分
        it->score = avg;//将平均分 赋值给选手身上
    }
}

void showScore(vector<Person> &v) {
    for (vector<Person>::iterator it = v.begin(); it != v.end(); ++it) {
        cout << "姓名： " << it->name << " 平均分： " << it->score << endl;
    }
}

int main() {
    srand((unsigned int) time(nullptr));//随机数种子

    //1、创建5名选手
    vector<Person> v;//存放选手容器
    createPerson(v);

    //2、给5名选手打分
    setScore(v);

    //3、显示最后得分
    showScore(v);
    return 0;
}